// 项目标题
import setting from "./setting";
// 路由鉴权，项目当中路由能不能被访问的权限的设置
import router from "./router";
import nprogress from 'nprogress';
// 引入进度条样式
import "nprogress/nprogress.css"
// 进度条加载会出现一个小圆圈，将他关闭
nprogress.configure({ showSpinner: false })
// 获取用户相关的小仓库内部token数据，去判断用户是否登录成功
import useUserStore from "./store/modules/user";
import pinia from "./store";
// let UserStore = useUserStore();//会报错无法获取用户数据，
/* 
router总是比pinia之前创建，所以，当我们在router.js中使用pinia时，就会出现pinia还未注册的提示，我们只需要重新注册就行
*/
let userStore = useUserStore(pinia);



// 全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
    document.title = setting.title + to.meta.title
    // next 路由的放行函数 
    nprogress.start();
    // 获取token。判断用户登录还是未登录
    let token = userStore.token;
    // 获取username
    let username = userStore.username;
    // 用户登录判断
    if (token) {
        // 登录成功，访问login，不能访问，指向首页
        if (to.path == '/login') {
            next({ path: '/' })
        } else {
            // 登录成功访问其余六个路由
            if (username) {
                // 放行
                next();
            } else {
                // 如果没有用户信息，在守卫这里发请求获取到了用户信息在放行 
                try {
                    // 获取用户信息
                    await userStore.userInfo();
                    next();
                } catch (error) {
                    // token过期：获取不到用户的信息了
                    // 或者用户手动修改本地存储token
                    // 实现：退出登录
                    await userStore.userLogout();
                    next({ path: '/login', query: { redirect: to.path } })

                }
            }
        }
    } else {
        // 用户未登录判断
        if (to.path == '/login') {
            next()
        } else {
            next({
                path: '/login',
                query: { redirect: to.path }
            })
        }
    }
    // next()
})

// 全局后置守卫
router.afterEach((to: any, from: any) => {
    nprogress.done()
})